package com.hyt.it.ogt.kq.service.gov.service;

import java.io.IOException;

import javax.servlet.http.HttpServletResponse;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hyt.it.ogt.kq.common.config.exception.KqException;
import com.hyt.it.ogt.kq.service.gov.model.entity.RegisterInfo;
import com.hyt.it.ogt.kq.service.gov.model.param.RegisterParam;
import com.hyt.it.ogt.kq.service.gov.model.vo.RegisterStatisticsVO;
import com.hyt.it.ogt.kq.service.gov.model.vo.RegisterVO;
import com.hyt.model.PageParam;

/**
 * <p>
 * 考场注册信息表 服务类
 * </p>
 *
 * @author liuq
 * @since 2021-05-08
 */
public interface IRegisterInfoService extends IService<RegisterInfo> {

	/**
	 * 考场注册数据
	 * @param pageParam
	 * @param param
	 * @return
	 */
	Page<RegisterVO> page(PageParam<RegisterVO> pageParam, RegisterParam param);

	/**
	 * 考场注册统计数据
	 * @param param
	 * @return
	 */
	RegisterStatisticsVO statistics(RegisterParam param);

	/**
	 * 清除注册
	 * @param roomId
	 * @throws Exception
	 */
	void clean(String roomId) throws Exception;

	/**
	 * 新增考场注册信息
	 * @param registerInfo 考场注册信息
	 * @return 是否成功
	 */
	boolean add(RegisterInfo registerInfo);

	/**
	 * 根据考试任务编号和考场编号获取考场注册信息
	 * @param taskCode 考试任务编号
	 * @param roomCode 考场编号
	 * @return 考场注册信息
	 */
	RegisterInfo getByTaskAndRoomCode(String taskCode, String roomCode);

	/**
	 * 导出考场注册数据
	 * @param response
	 * @param param
	 * @throws IOException
	 * @throws KqException
	 */
	void export(HttpServletResponse response, RegisterParam param) throws IOException, KqException;

	/**
	 * 根据考场id获取注册信息
	 * @param roomId 考场id
	 * @return 注册信息
	 */
	RegisterInfo getByRoomId(String roomId);

	/**
	 * 当前监考机是否已注册其他考场
	 * @param taskCode 考试任务编号
	 * @param mac 当前监考机mac地址
	 * @return true：已注册其他考场，false：未注册其他考场
	 */
	Boolean monitorRegistered(String taskCode, String mac);

	/**
	 * 考场是否已被注册
	 * @param roomId 考场id
	 * @return true：已被注册，false：未被注册
	 */
	boolean roomRegistered(String roomId);

}
